#include <regx52.h>
sbit N_R = P2 ^ 0;
sbit N_G = P2 ^ 1;
sbit N_Y = P2 ^ 2;
sbit E_R = P2 ^ 3;
sbit E_G = P2 ^ 4;
sbit E_Y = P2 ^ 5;

void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

void main(void)
{
    unsigned char i;
    P2 = 0xFF;
    while (1)
    {
        // 阶段1：南北方向绿灯，东西方向红灯，持续5秒
        N_R = 1;
        N_G = 0;
        E_R = 0;
        delay_ms(5000);
        // 阶段2：南北方向其他灯灭，
        // 黄灯闪烁3次（500ms），东西方向红灯保持
        N_G = 1;
        for (i = 0; i < 3; i++)
        {
            N_Y = 0;
            delay_ms(500);
            N_Y = 1;
            delay_ms(500);
        }
        // 阶段3：东西方向绿灯，南北方向红灯，持续5秒
        E_R = 1;
        E_G = 0;
        N_R = 0;
        delay_ms(5000);
        // 阶段4：东西方向其他灯灭，黄灯闪烁3次（500ms），南北方向红灯保持
        E_G = 1;
        for (i = 0; i < 3; i++)
        {
            E_Y = 0;
            delay_ms(500);
            E_Y = 1;
            delay_ms(500);
        }
    }
}